<?php
namespace Activity\Models;

use Commons\App;
use Phalcon\Mvc\Model;

class Base extends Model
{
    /**
     * @var \Phalcon\Db\Adapter\Pdo\Mysql
     */
    private $db;

    public function initialize()
    {
    }

    /**
     * 获取数据库对象
     *
     * @return \Phalcon\Db\Adapter\Pdo\Mysql
     */
    public function db()
    {
        if (!is_object($this->db)) {
            $this->db = $this->getDI()->getShared('db');
        }
        return $this->db;
    }

    /**
     * Return internal PDO handler
     *
     * @return \PDO
     */
    public function pdo()
    {
        return $this->db()->getInternalHandler();
    }

    /**
     * 获取memcache对象
     *
     * @return \Phalcon\Cache\Backend\Memcache
     */
    public function memCache()
    {
        return App::memCache();
    }

    /**
     * 返回redis对象
     *
     * @return \Phalcon\Cache\Backend\Redis
     */
    public function redis()
    {
        return App::redis();
    }

    /**
     * @return Model\Query\BuilderInterface
     */
    public function queryBuilder()
    {
        return $this->getModelsManager()->createBuilder();
    }

    /**
     * 封装查询语句
     *
     * @param string $columns
     *
     * @return Model\Query\BuilderInterface
     */
    public function select($columns = '*')
    {
        return $this->queryBuilder()->columns($columns);
    }

    /**
     * 记录错误日志
     *
     * @param string $type   数据库操作类型
     * @param string $query  数据库查询语句
     * @param string $reason 失败原因
     * @param string $file   发生的文件
     * @param int    $line   发生错误的行数
     *
     * @return void
     */
    public function errorLog($type, $query, $reason, $file, $line)
    {
        App::Logger()->error(sprintf('数据库操作失败：类型[%s]，Query[%s]原因[%s][%s:%s]', $type, $query, $reason, $file, $line));
    }
}
